package com.houkunlin.wake.lan.host;

import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.houkunlin.dao.extend.mybatisplus.LambdaQuery;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 查询对象：主机信息
 *
 * @author HouKunLin
 */
@ApiModel("查询对象：主机信息")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HostInfoQuery implements LambdaQuery<HostInfo> {
    /**
     * 主键
     */
    @ApiModelProperty("主键")
    private String id;
    /**
     * 主机名称
     */
    @ApiModelProperty("主机名称")
    private String name;
    /**
     * MAC 地址
     */
    @ApiModelProperty("MAC 地址")
    private String mac;
    /**
     * 网关地址（默认：255.255.255.255）
     */
    @ApiModelProperty("网关地址（默认：255.255.255.255）")
    private String gateway;
    /**
     * 端口（默认：9）
     */
    @ApiModelProperty("端口（默认：9）")
    private Integer port;
    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;

    @Override
    public LambdaQueryChainWrapper<HostInfo> queryBuilder(final LambdaQueryChainWrapper<HostInfo> wrapper) {
        addQuery(HostInfo::getId, id, wrapper::eq);
        addQuery(HostInfo::getName, name, wrapper::like);
        addQuery(HostInfo::getMac, mac, wrapper::like);
        addQuery(HostInfo::getGateway, gateway, wrapper::like);
        addQuery(HostInfo::getPort, port, wrapper::eq);
        addQuery(HostInfo::getRemark, remark, wrapper::like);
        return wrapper;
    }

    @Override
    public QueryChainWrapper<HostInfo> queryBuilder(final QueryChainWrapper<HostInfo> wrapper) {
        addQuery("id", id, wrapper::eq);
        addQuery("name", name, wrapper::like);
        addQuery("mac", mac, wrapper::like);
        addQuery("gateway", gateway, wrapper::like);
        addQuery("port", port, wrapper::eq);
        addQuery("remark", remark, wrapper::like);
        return wrapper;
    }
}
